package reference.example;

import java.lang.ref.SoftReference;

public class SoftReferenceExample {
    public static void main(String[] args) {
        // 创建一个字符串对象，并创建一个软引用
        String str = new String("Hello, world!");
        SoftReference<String> softRef = new SoftReference<>(str);

        // 打印软引用指向的对象 通过软引用可以获取对象 获取到对象后可以操作对象
        System.out.println(softRef.get()); // 输出：Hello, world!

        // 置空引用
        str = null;

        // 执行垃圾回收
        System.gc();

        // 等待一段时间，以确保垃圾回收线程完成工作
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 再次尝试打印软引用指向的对象
        System.out.println(softRef.get()); // 输出：Hello, world!

        // 创建大量的对象，占用内存空间
        try {
            byte[] bytes = new byte[1024 * 1024 * 100]; // 创建一个100MB的字节数组
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
        }

        // 再次尝试打印软引用指向的对象
        System.out.println(softRef.get()); // 输出：null
    }
}

